home *** CD-ROM | disk | FTP | other *** search
- ARTemis のにじみペンですが、
- 「インプリメント」なんて呼べるほど大したアイデアがあるわけでは
- ありません(^^;)
-
- ただ単に「でたらめな方向へ、だんだん(濃度が)薄くなりながら伸
- びていく」というのを何度も繰り返しているだけです。
- TurboGraphics の「色を画面に溜めていく」という方法よりもインチ
- キくさいです(爆)
-
- 実際のアルゴリズムは、
-
- ---------------------------------------------------------------------
- void blot_plot(int x, int y, int nBranch, int nRepeat)
- // ●ランダムに伸びていく線を一本描く。
- // nBranch : いくつに枝分かれするのか
- // nRepeat : 何ピクセル分伸びるのか
- {
- deci nGrayCutRate; // 1ピクセルにつきどれだけ濃度を減らすか
-
- void blot_plot_sub(int x, int y, int nRepeat, deci nGrayScale)
- // nRepeat : あと何ピクセル分伸びるのか
- // nGrayScale : ピクセルを描画する濃度 (0:薄い ~ 256:濃い)
- {
- if (nRepeat <= 0 || nGrayScale <= 0)
- return;
- PSET(x,y, DeciToInt(nGrayScale)); // ピクセルを描画
- int i;
- for (i = 0; i < nBranch; i++)
- {
- int nx,ny;
- nx = x + rand() % 3 - 1; // ランダムに1ドット移動
- ny = y + rand() % 3 - 1;
- blot_plot_sub(nx, ny, nRepeat-1, nGrayScale-nGrayCutRate);
- // ↑自分自身を再帰的に呼び出し、続くピクセルを描画
- }
- }
-
- nGrayCutRate = IntToDeci(50) / nRepeat;
- blot_plot_sub(x,y,nRepeat,IntToDeci(50));
- // (↑このへんの 50 という数値が特にインチキくさい)
- }
- ---------------------------------------------------------------------
- (※) deci 型とは、実際には int 型で、10ビット固定小数点として扱う。
-
- ……という具合になっています。(実際のソースプログラムはフリコレ内に入ってい
- て、にじみペンに関する処理は subgrp.c 580行目あたりにあります)
-
- 松内
-